説明
バグレポート
TextField にはマテリアル ローカリゼーション ウィジェットが必要です
まとめ
のインスタンスTextField
を持っている必要がありますMaterialLocalizations
ウィジェットツリーに存在します。
をインスタンス化しようとしていますTextField
適切なローカリゼーションがないと
結果は次のようなアサーションになります。
No MaterialLocalizations found.
TextField widgets require MaterialLocalizations to be provided by a Localizations widget ancestor.
The material library uses Localizations to generate messages, labels, and abbreviations.
To introduce a MaterialLocalizations, either use a MaterialApp at the root of your application to
include them automatically, or add a Localization widget with a MaterialLocalizations delegate.
The specific widget that could not find a MaterialLocalizations ancestor was:
TextField
コンテクスト
もしTextField
から派生しますMaterialApp
、DefaultMaterialLocalizations
すでにインスタンス化されています
既存のコードを変更する必要はありません。
もしTextField
から降りていないMaterialApp
、
を使用できますLocalizations
ウィジェットへ
独自のローカリゼーションを提供します。
移行ガイド
アサーション エラーが表示された場合は、次のことを確認してください。
ロケール情報は、TextField
、
先祖を通してMaterialApp
(自動的に提供されますLocalizations
)、 また
自分で作成することでLocalizations
ウィジェット。
移行前のコード:
import 'package:flutter/material.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MediaQuery(
data: const MediaQueryData(),
child: Directionality(
textDirection: TextDirection.ltr,
child: Material(
child: TextField(),
),
),
);
}
}
移行後のコード (MaterialApp
):
import 'package:flutter/material.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Material(
child: TextField(),
),
);
}
}
移行後のコード (Localizations
ウィジェット):
import 'package:flutter/material.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Localizations(
locale: const Locale('en', 'US'),
delegates: const <LocalizationsDelegate<dynamic>>[
DefaultWidgetsLocalizations.delegate,
DefaultMaterialLocalizations.delegate,
],
child: MediaQuery(
data: const MediaQueryData(),
child: Directionality(
textDirection: TextDirection.ltr,
child: Material(
child: TextField(),
),
),
),
);
}
}
タイムライン
リリースされたバージョン: 1.20.0-1.0.pre
安定版リリース: 1.20
参考文献
API ドキュメント:
TextField
Localizations
MaterialLocalizations
DefaultMaterialLocalizations
MaterialApp
- Flutter アプリの国際化
関連する PR:
- PR 58831: TextField で debugCheckHasmaterialLocalizations をアサートする